# 运算符

# 算数运算符
# 标准运算符（+，-，*，/(除)，//(整除)取整 取余运算符（%）  幂运算符（**）n**m 表示n的m次幂
# // 一正一负的情况下向下取整
print(9 // -4)  # 输出-3
# % 公式：余数=被除数-除数*（商） 针对一正一负的情况

# 赋值运算符
# 执行顺序从右到左
# 支持链式赋值
a = b = c = 20
# 支持参数赋值 += -= /= //= %= /可能会将int类型转换为float
# 支持系列解包赋值 左边要和右边个数一样
d, e, f = 20, 30, 40

print(id(a), id(b), id(c))

# 比较运算符
# >, <, >=, <=, !=, ==(比较的是value) is, is not(比较的是标识)
n = 10
m = 10
print(n is m)  # 结果为True 内存地址相同 但是如果是数组的情况下 内存地址则不相同
arr1 = [11, 12, 13]
arr2 = [11, 12, 13]
print(arr1 is arr2)  # 结果为False

# 布尔运算
# and, or, not, in, not in
# and-->&& or-->|| not-->!
bool1 = False
bool2 = True
print(bool1 or bool2)

str1 = "aldaso"
print('a' in str1)
print('z' in str1)

# 位运算符
# 位与& 对应数位都是1，结果数位才是1，否则为0
# 为或| 对应数位都是0，结果数位才是0，否则为1
# 左移位运算符<< 高位溢出舍弃，低位补0 前一个的两倍
# 右移位运算符>> 低位溢出舍弃，高位补0
print(5 << 4)
print(5 >> 1)

# 运算符的优先级 先算数运算 --> 位运算 --> 比较运算 --> 布尔运算
